-- 2022-7-28

--[[
    Lua语言中一种与众不同但又非常有用的特性是允许一个函数返回多个结果
    Lua语言几个预定义函数就会返回多个值

    返回的值，我们可以通过多重赋值接收
        eg s,e = string.find("hello","ell") -->2    4
    
    自定义的函数同样可以返回多个结果，只需要return关键字后列出所有要返回的值即可

    Lua语言根据函数的被调用情况调整返回值的数量。
    当函数被作为一条单独的语句使用时，其返回值会被舍弃
    当函数被作为表达的是调用时，将只保留函数的第一个返回值
    当函数调用是一系列表达式在的最后一个表达式时，其所有的返回值在才被获取到
        "一系列表达式" 在Lua有四种情况
            多重赋值
                function fun1() return x,y end
                如果一个函数调用是一系列表达式中的最后(或者是唯一)一个表达式，则返回值将尽可能的返回多个来进行匹配
                x,y = fun1() --> x    y
                如果函数返回值为0，或者返回值不够多，lua语言会用nil来补充缺少的值
                x,y,z = fun1() --> x    y   nil
                注意当函数调用是一系列表达式中的最后(或者是唯一)一个表达式时才能返回多值结果，否则只能返回一个结果
                x,y = fun1(),20 --> x   20
            函数调用时传入的实参列表
                当一个函数调用是另一个函数调用的最后一个实参时，第一个函数的所有返回值都会被作为实参传给第二个函数
                print(fun1()) --> x y
                print(fun1(),0) --> x   0
            表构造器
                表构造器会完整的接收函数调用的所有返回值，而不会调整返回值的个数
                t = {fun1()} --> t = {"x","y"}
            return语句
                返回所有的结果
                    return fun1()
                将函数调用用一堆圆括号括起来可以强制其返回一个结果
                    print((fun1())) --> x
                所以我们应该注意return后的语句不应该加括号，否则会造成其他行为
]]